#include "constraints_widget.h"

#include <QGroupBox>
#include <QLabel>
#include <QPushButton>
#include <QVBoxLayout>
#include <QHBoxLayout>

#include "core/music_settings.h"

ConstraintsWidget::ConstraintsWidget(MusicSettings *settings, QWidget *parent):
  QWidget(parent),
  settings(settings) {
  QGroupBox *melodyBox = new QGroupBox("Mélodie", this);
  QVBoxLayout *melodyBoxLayout = new QVBoxLayout;
  melodyBox->setLayout(melodyBoxLayout);

  infoLabel = new QLabel(this);
  melodyBoxLayout->addWidget(infoLabel);

  generateButton = new QPushButton("&Générer", this);
  generateButton->setToolTip("Cliquez sur ce bouton pour composer une mélodie");
  connect(generateButton, SIGNAL(clicked()), this, SIGNAL(generate()));
  melodyBoxLayout->addWidget(generateButton);

  QHBoxLayout *mainLayout = new QHBoxLayout;
  mainLayout->addWidget(melodyBox);
  setLayout(mainLayout);

  updateInfos();
}

/*!
 * Désactive les boutons du widget
 */
void ConstraintsWidget::notReady() {
  generateButton->setDisabled(true);
}

/*!
 * Active les boutons du widget
 */
void ConstraintsWidget::ready() {
  generateButton->setEnabled(true);
}

/*!
 * Met à jour les informations du widget
 */
void ConstraintsWidget::updateInfos() {
  infoLabel->setText("<b>Paramètres</b><br>"
                     "Nombre de notes : " +
                     QString("%1").arg(settings->scoreSize) + "<br>"
                     "Nombre d'octaves : " +
                     QString("%1").arg(settings->nbOctave) + "<br>"
                     "Tempo : " +
                     MusicSettings::tempoToHumanString(settings->tempo) + "<br>"
                     "Tonalité : " +
                     MusicSettings::scaleToHumanString(settings->scale) + "<br>"
                     "Mode : " +
                     MusicSettings::modeToHumanString(settings->mode) + "<br>"
                     "Degré 1ère note : " +
                     MusicSettings::degreeToHumanString(settings->firstNote) +
                     "<br>"
                     "Motif : " +
                     (settings->pattern.isEmpty() ?
                      "<font color=\"#aaaaaa\">Non défini</font>" :
                      ((settings->pattern.size() < 15) ?
                          settings->pattern :
                          settings->pattern.left(12) + "..."))
                     + "<br>"
                     "Notes conjointes : " +
                     (settings->conjoint ?
                        "Oui" : "<font color=\"#aaaaaa\">Non</font>")  + "<br>"
                     "Pas de répétition : " +
                     (settings->noRepetition ?
                        "Oui" : "<font color=\"#aaaaaa\">Non</font>") + "<br>"
                     );
}
